/**
 * 分治：
 *      算法思想：把大问题分解成足够小的子问题，然后通过子问题的解合并成大问题的解
 *      分治法适用的条件：
 *          1：问题的规模缩小到一定的时候就可以容易解决
 *          2：问题可以分解成若干个规模较小的相同问题
 *          3：利用该问题分解出的子问题的解可以合并为该问题的解
 *          4：该问题分解出的子问题是相互独立的（如果不独立，可以采用动态规划来解，提高效率） 
 */


 function printPermutation(list, k, n) {
    if (k === n - 1) {
        let str = ''
        for (let item of list) {
            str += item
        }
        // console.log(str)
        return
    } else {
        for (let i = k; k < n; i++) {
            swap(list, k, i)
            printPermutation(list, k + 1, n)
            swap(list, k, i)
        }
    }
 }

 function swap(list, j, k) {
     let t = list[j]
     list[j] = list[k]
     list[k] = t
 }

 printPermutation([1, 2, 3], 0, 3)